home *** CD-ROM | disk | FTP | other *** search
/ Aminet 33 / Aminet 33 - October 1999.iso / Aminet / util / cli / cliutils_mra.lha / Sources / ReadDevice.a < prev    next >
Encoding:
Text File  |  1998-09-02  |  4.2 KB  |  251 lines

  1. ;
  2. ; $VER: ReadDevice.a 37.1 (1998.07.20) by Mauro Panigada
  3. ;
  4. ; Requirements: os2.1 (#37), 68020+
  5. ; Purpose: replace ReadDevice by ...
  6. ; Note: PURE
  7. ;
  8. ; Usage: ReadDevice DEVICE/A
  9. ;
  10.  
  11.         incdir    "inc:"
  12.         include    "exec/types.i"
  13.         include    "exec/libraries.i"
  14.         include    "exec/memory.i"
  15.         include    "exec/exec_lib.i"
  16.         include    "dos/dos.i"
  17.         include    "dos/filehandler.i"
  18.         include    "dos/dosextens.i"
  19.         include    "dos/dos_lib.i"
  20.  
  21.  
  22. CALL        MACRO
  23.         jsr    (_LVO\1,a6)
  24.         ENDM
  25.  
  26. EXECBASE    MACRO
  27.         move.l    (4).w,a6
  28.         ENDM
  29.  
  30.     STRUCTURE internal,0
  31.         LONG    dosbase
  32.  
  33.         LABEL    array
  34.         LONG    device
  35.  
  36.         STRUCT    arguments,33*4
  37.  
  38.         LABEL    s_sizeof
  39.  
  40.  
  41.         opt    p=68020
  42.  
  43.  
  44. LIBVERSION    EQU    37
  45.  
  46.  
  47.     SECTION    main,CODE
  48.  
  49.         bra.s    start
  50.  
  51.         dc.b    "$VER: ReadDevice 37.1 [020+] (1998.07.20) by Mauro Panigada"
  52.         dc.b    13,10,0
  53.         even
  54.  
  55. start
  56.         EXECBASE
  57.         move.l    #s_sizeof,d0
  58.         move.l    #MEMF_ANY|MEMF_CLEAR,d1
  59.         CALL    AllocMem
  60.         move.l    d0,a5
  61.         beq    exit00
  62.  
  63.         lea    (dosname,pc),a1
  64.         moveq    #LIBVERSION,d0
  65.         CALL    OpenLibrary
  66.         move.l    d0,(a5)
  67.         beq    exit01
  68.  
  69.         move.l    d0,a6
  70.         lea    (template,pc),a0
  71.         move.l    a0,d1
  72.         move.l    a5,d2
  73.         addq.l    #array,d2
  74.         moveq    #0,d3
  75.         CALL    ReadArgs
  76.         move.l    d0,d7            ; d7=readargs
  77.         beq    exit02err
  78.  
  79.     *move.l    (device,a5),d1
  80.     *moveq    #SHARED_LOCK,d2
  81.     *CALL    Lock
  82.     *move.l    d0,d6            ; d6=lock
  83.     *beq    exit03err
  84.     *lea    (devinfo,a5),a0
  85.     *move.l    a0,a4
  86.     *move.l    a0,d2
  87.     *move.l    d0,d1
  88.     *CALL    Info
  89.     *tst.l    d0
  90.     *beq    exit04err
  91.     *move.l    (id_VolumeNode,a4),d0
  92.     *lsl.l    #2,d0
  93.  
  94.         moveq    #LDF_DEVICES|LDF_READ,d1
  95.         CALL    LockDosList
  96.         move.l    d0,d1
  97.         move.l    (device,a5),d2
  98.         moveq    #LDF_DEVICES,d3
  99.         CALL    FindDosEntry
  100.         tst.l    d0
  101.         beq    exit03err
  102.  
  103.         move.l    d0,a4        ;a4=dvi
  104.  
  105.         move.l    (dvi_Startup,a4),a0
  106.         adda.l    a0,a0
  107.         adda.l    a0,a0
  108.         move.l    (fssm_Environ,a0),a2
  109.         adda.l    a2,a2
  110.         adda.l    a2,a2            a2=startup
  111.  
  112.         lea    (arguments,a5),a3
  113.         move.l    a3,d2
  114.         move.l    (dvi_Name,a4),(a3)+
  115.         move.l    (dvi_Task,a4),(a3)+
  116.         move.l    (dvi_Handler,a4),(a3)+
  117.         move.l    (dvi_Stacksize,a4),(a3)+
  118.         move.l    (dvi_Priority,a4),(a3)+
  119.         move.l    (dvi_SegList,a4),d0
  120.         lsl.l    #2,d0
  121.         move.l    d0,(a3)+
  122.         move.l    (dvi_GlobVec,a4),d0
  123.         *lsl.l    #2,d0
  124.         move.l    d0,(a3)+
  125.         move.l    a0,(a3)+
  126.  
  127.         move.l    a0,-(sp)
  128.         lea    (testone,pc),a0
  129.         move.l    a0,d1
  130.         CALL    VPrintf
  131.         move.l    (sp)+,a0
  132.  
  133.         tst.l    a0
  134.         beq.s    nn1
  135.  
  136.         move.l    a3,d2
  137.         move.l    (fssm_Device,a0),(a3)+
  138.         move.l    (fssm_Unit,a0),(a3)+
  139.         move.l    (fssm_Flags,a0),(a3)+
  140.  
  141.         lea    (testone2,pc),a0
  142.         move.l    a0,d1
  143.         CALL    VPrintf
  144.  
  145. nn0        tst.l    a2
  146.         beq.s    nn1
  147.  
  148.         move.l    a3,d2
  149.         move.w    #(DosEnvec_SIZEOF/4)-1,d0
  150. loop0        move.l    (a2)+,(a3)+
  151.         dbf    d0,loop0
  152.  
  153.         lea    (testone3,pc),a0
  154.         move.l    a0,d1
  155.         CALL    VPrintf
  156.  
  157. nn1
  158.         bsr    unlockit
  159.  
  160. exit99
  161.  
  162. exit03
  163.         move.l    d7,d1
  164.         CALL    FreeArgs
  165.  
  166. exit02
  167.         move.l    (a5),a1
  168.         EXECBASE
  169.         CALL    CloseLibrary
  170.  
  171. exit01
  172.         move.l    a5,a1
  173.         move.l    #s_sizeof,d0
  174.         CALL    FreeMem
  175.  
  176. exit00
  177.         rts
  178.  
  179. exit02err
  180.         pea    (exit02,pc)
  181.         bra.s    exiterr
  182. exit03err
  183.         pea    (exit03,pc)
  184.         bsr    unlockit
  185.         lea    (messer,pc),a0
  186.         move.l    a0,d1
  187.         lea    (device,a5),a0
  188.         move.l    a0,d2
  189.         jmp    _LVOVPrintf(a6)
  190.  
  191. exiterr
  192.         CALL    IoErr
  193.         move.l    d0,d1
  194.         moveq    #0,d2
  195.         CALL    PrintFault
  196.         rts
  197.  
  198. unlockit    moveq    #LDF_DEVICES|LDF_READ,d1
  199.         CALL    UnLockDosList
  200.         rts
  201.  
  202.  
  203.  
  204. ;===============================================================================
  205.  
  206. dosname        dc.b    "dos.library",0
  207.  
  208. testone
  209.         dc.b    " Name = %b",10
  210.         dc.b    " Task = 0x%lx",10
  211.         dc.b    " Handler = %b",10
  212.         dc.b    " Stacksize = %lu",10
  213.         dc.b    " Priority = %ld",10
  214.         dc.b    " SegList = 0x%lx",10
  215.         dc.b    " GlobalVec = 0x%lx",10
  216.         dc.b    " Startup = 0x%lx",10,0
  217. testone2
  218.         dc.b    "FileSysStartupMsg info:",10
  219.         dc.b    " Device = %b",10
  220.         dc.b    " Unit = %lu",10
  221.         dc.b    " Flags = 0x%lx",10,0
  222. testone3
  223.         dc.b    "DosEnvec info:",10
  224.         dc.b    " TableSize = %lu",10
  225.         dc.b    " Block Size = %lu",10
  226.         dc.b    " SecOrg = %lu",10
  227.         dc.b    " Number of Heads = %lu",10
  228.         dc.b    " Sectors per Block = %lu",10
  229.         dc.b    " Blocks per Track = %lu",10
  230.         dc.b    " Reserved blocks at start = %lu",10
  231.         dc.b    " Reserved blocks at end = %lu",10
  232.         dc.b    " Interleave = %lu",10
  233.         dc.b    " Low Cylinder = %lu",10
  234.         dc.b    " High Cylinder = %lu",10
  235.         dc.b    " Number of DOS Buffers = %lu",10
  236.         dc.b    " Buffer Memory Type = 0x%lx",10
  237.         dc.b    " MaxTransfer = %lu",10
  238.         dc.b    " Memory Write Mask = 0x%lx",10
  239.         dc.b    " Boot Priority = %ld",10
  240.         dc.b    " DOS Type = 0x%lx",10
  241.         dc.b    " Baud = %lu",10
  242.         dc.b    " Handler Control Word = 0x%lx",10
  243.         dc.b    " Number of BootBlocks = %lu",10
  244.         dc.b    0
  245.  
  246. template    dc.b    "DEVICE/A",0
  247.  
  248. messer        dc.b    "Device %s not found.",10,0
  249.  
  250.  
  251.         END